/**
 * 
 */
package uy.com.pzit.fpmundialmodel.manager;

import java.util.List;

import uy.com.pzit.fpmundialmodel.analyzer.MatchAnalyzer;
import uy.com.pzit.fpmundialmodel.dao.EncuentroDAO;
import uy.com.pzit.fpmundialmodel.domain.Encuentro;
import uy.com.pzit.fpmundialmodel.domain.Fase;
import uy.com.pzit.fpmundialmodel.domain.PaisEnCompeticion;
import uy.com.pzit.fpmundialmodel.domain.Resultado;
import uy.com.pzit.fpmundialmodel.response.EncuentroResponse;

/**
 * @author pferraz
 *
 */
public class EncuentroManager {

	private PaisEnCompeticionManager paisEnCompManager;
	private EncuentroDAO encuentroDAO;
	
	public EncuentroResponse updateTables(Encuentro encuentro,int idCompetencia) {
		EncuentroResponse resp=new EncuentroResponse();
		List<PaisEnCompeticion> paisesEnComp=paisEnCompManager.getPaisEnCompByMundialAndFase(idCompetencia,Fase.valueOf(encuentro.getFase()));
		
		calculateTable(encuentro,paisesEnComp);
		paisEnCompManager.updatePaises(paisesEnComp);
		resp.setPaisesEnCompeticion(paisesEnComp);
		return resp;
		
	}

	private void calculateTable(Encuentro encuentro,List<PaisEnCompeticion> paisesEnComp) {
		/*Calculo para pais 1*/
		Resultado resP1=MatchAnalyzer.analyzeResult(encuentro.getGolesP1(),encuentro.getGolesP2());
		Resultado resP2=MatchAnalyzer.analyzeResult(encuentro.getGolesP2(),encuentro.getGolesP1());
		
		for(PaisEnCompeticion p:paisesEnComp){
			if(p.getPais().getNombre().equalsIgnoreCase(encuentro.getPais1().getNombre())){
				p.setGolesFavor(p.getGolesFavor()+encuentro.getGolesP1());
				p.setGolesContra(p.getGolesContra()+encuentro.getGolesP2());
				proccessResults(resP1, p);
			}else if(p.getPais().getNombre().equalsIgnoreCase(encuentro.getPais2().getNombre())){
				p.setGolesFavor(p.getGolesFavor()+encuentro.getGolesP2());
				p.setGolesContra(p.getGolesContra()+encuentro.getGolesP1());
				proccessResults(resP2, p);
			}
		}
	
		
	}

	/**
	 * @param resPais
	 * @param pais
	 */
	private void proccessResults(Resultado resPais, PaisEnCompeticion pais) {
		if(resPais==Resultado.GANO){
			pais.setpGanados(pais.getpGanados()+1);
			pais.setPuntos(pais.getPuntos()+3);
		}else if(resPais==Resultado.EMPATO){
			pais.setpEmpatados(pais.getpEmpatados()+1);
			pais.setPuntos(pais.getPuntos()+1);
		}else{
			pais.setpPerdidos(pais.getpPerdidos()+1);
		}
	}

	
	
	/**
	 * @param encuentroDAO the encuentroDAO to set
	 */
	public void setEncuentroDAO(EncuentroDAO encuentroDAO) {
		this.encuentroDAO = encuentroDAO;
	}
	

	/**
	 * @param paisEnCompManager the paisEnCompManager to set
	 */
	public void setPaisEnCompManager(PaisEnCompeticionManager paisEnCompManager) {
		this.paisEnCompManager = paisEnCompManager;
	}


	public void addEncuentro(Encuentro encuentro) {
		encuentroDAO.addEncuentro(encuentro);
	}

}
